package com.ahncnk.powermonitor.admin;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.time.Duration;

/**
 * 应用级系统配置.
 *
 * @author lipei
 */
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    /**
     * 应用名称.
     */
    private String appName;
    /**
     * 登录和权限配置.
     */
    private AuthConfig auth;

    /**
     * 应用名称.
     */
    public String getAppName() {
        return appName;
    }

    /**
     * 应用名称.
     */
    public void setAppName(String appName) {
        this.appName = appName;
    }

    /**
     * 登录和权限配置.
     */
    public AuthConfig getAuth() {
        return auth;
    }

    /**
     * 登录和权限配置.
     */
    public void setAuth(AuthConfig auth) {
        this.auth = auth;
    }

    /**
     * 与登录和权限相关的配置.
     */
    public static class AuthConfig {
        /**
         * 用来加密登录token的密钥.
         */
        private String secret;
        /**
         * access-token 有效期. 默认30分钟。
         */
        private Duration expireTimeout = Duration.ofMinutes(30);
        /**
         * 重启后丢弃所有会话.
         */
        private boolean clearSessionsAfterRestart;
        /**
         * 允许跨站请求伪造. 设为true可方便浏览器调试。
         */
        private boolean allowCsrf;

        /**
         * 用来加密登录token的密钥.
         */
        public String getSecret() {
            return secret;
        }

        /**
         * 用来加密登录token的密钥.
         */
        public void setSecret(String secret) {
            this.secret = secret;
        }

        /**
         * access-token 有效期.
         */
        public Duration getExpireTimeout() {
            return expireTimeout;
        }

        /**
         * access-token 有效期.
         */
        public void setExpireTimeout(Duration expireTimeout) {
            this.expireTimeout = expireTimeout;
        }

        /**
         * 重启后丢弃所有会话.
         */
        public boolean isClearSessionsAfterRestart() {
            return clearSessionsAfterRestart;
        }

        /**
         * 重启后丢弃所有会话.
         */
        public void setClearSessionsAfterRestart(boolean clearSessionsAfterRestart) {
            this.clearSessionsAfterRestart = clearSessionsAfterRestart;
        }

        /**
         * 允许跨站请求伪造. 设为true可方便浏览器调试。
         */
        public boolean isAllowCsrf() {
            return allowCsrf;
        }

        /**
         * 允许跨站请求伪造. 设为true可方便浏览器调试。
         */
        public void setAllowCsrf(boolean allowCsrf) {
            this.allowCsrf = allowCsrf;
        }
    }
}
